﻿using System.Collections.Generic;
using GigaSite.Domain.Entities;
using GigaSite.Domain.Enums;

namespace GigaSite.Domain.Interfaces.Repositories
{
    /// <summary>
    /// Абстрактный репозиторий компаний
    /// </summary>
    public interface ICompaniesRepository: IBaseRepository<Company>
    {
        /// <summary>
        /// Добавляет посетителя к компании под указанной ролью
        /// </summary>
        /// <param name="company">Компания</param>
        /// <param name="visitor">Посетитель</param>
        /// <param name="role">Роль, по умолчанию просто посетитель</param>
        void AddVisitor(Company company, User visitor, VisitorTypes role = VisitorTypes.Visitor);

        /// <summary>
        /// Удаляет посетителя у компании
        /// </summary>
        /// <param name="company">Компания</param>
        /// <param name="visitor">Посетитель компании</param>
        void RemoveVisitor(Company company, User visitor);

        /// <summary>
        /// Создает новую компанию в системе для указанного пользователя и устанавливает ее в указанных категориях
        /// </summary>
        /// <param name="company">Компания</param>
        /// <param name="owner">Пользователь зарегистрировавший компанию</param>
        /// <param name="categories">Категории к которым компания принадлежит</param>
        void CreateCompany(Company company, User owner, IEnumerable<Category> categories);

        /// <summary>
        /// Получает название компании по системному имени
        /// </summary>
        /// <param name="systemName">системное имя компании</param>
        /// <returns>Объект компании или null если его не найдено</returns>
        Company GetCompanyBySystemName(string systemName);
    }
}